package pe.com.bbva.modpre.persistencia.hibernate;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.com.bbva.modpre.dominio.Ans;
import pe.com.bbva.modpre.dominio.Equipo;
import pe.com.bbva.modpre.dominio.SpreadFinanciero;
import pe.com.bbva.modpre.persistencia.AnsDAO;
import pe.com.bbva.modpre.persistencia.SpreadFinancieroDAO;
import pe.com.bbva.modpre.ui.ModpreApplication;
import pe.com.bbva.modpre.utileria.Busqueda;

@Repository
@SuppressWarnings("serial")
public class SpreadFinancieroHibernate extends BaseHibernate<SpreadFinanciero, Long> 
implements SpreadFinancieroDAO {
	Logger logger = LogManager.getLogger(ModpreApplication.class.getName());
	@Autowired
	DataSource dataSource;
	
	@Autowired
	public SpreadFinancieroHibernate(SessionFactory sessionFactory){
		setSessionFactory(sessionFactory);
	}

	@Override
	public void procedureSpreadDatosFinancieros() {
		Connection conn=null;
		CallableStatement cStmt =null;
		String error="";
		try {
			conn = dataSource.getConnection();
			cStmt = conn.prepareCall("{call MODPRE.PK_CARGA_ARCHIVO.SP_SPREAD_CLI_FIN_OFI}");
			cStmt.execute();
		} catch (SQLException e1) {
			error="Modpre SP_CARGAR_SISTEMA "+e1;
		}finally{
			if(cStmt!=null){
				try {
					cStmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(conn!=null)
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
		if(StringUtils.isNotBlank(error)){
			logger.info(error);
		}
	}

	@Override
	public List<SpreadFinanciero> obtenerTiposSpreadFinanciero(String spread1, SpreadFinanciero spread) {
		Integer mes,mes1,mes2,mes3,anio1,anio2,anio3;
		mes = Integer.parseInt(spread.getPeriodoMes().toString())+1;
		if(mes==1){
			mes1=10;
			mes2=11;
			mes3=12;
			anio1=spread.getPeriodoAnio()-1;
			anio2=spread.getPeriodoAnio()-1;
			anio3=spread.getPeriodoAnio()-1;
		}else{
			if(mes==2){
				mes1=11;
				mes2=12;
				mes3=1;
				anio1=spread.getPeriodoAnio()-1;
				anio2=spread.getPeriodoAnio()-1;
				anio3=spread.getPeriodoAnio();
			}else{
				if(mes==3){
					mes1=12;
					mes2=1;
					mes3=2;
					anio1=spread.getPeriodoAnio()-1;
					anio2=spread.getPeriodoAnio();
					anio3=spread.getPeriodoAnio();
				}else{
					mes1 = mes-3;
					mes2 = mes-2;
					mes3 = mes-1;
					anio1=spread.getPeriodoAnio();
					anio2=spread.getPeriodoAnio();
					anio3=spread.getPeriodoAnio();
				}
			}
		}
		
		return buscarHql("select s from SpreadFinanciero s where doiCodigo=? and ((periodoMes=? and periodoAnio=?) or (periodoMes=? and periodoAnio=?) or (periodoMes=? and periodoAnio=?)) order by periodo_mes ", spread1,mes3,anio3,mes2,anio2,mes1,anio1);
	}
	
}
